package com.example.springcloud.springcloudfeign.async;

import com.example.springcloud.springcloudfeign.feign.FeignService;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.command.AsyncResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.concurrent.Future;

/**
 * 在使用 feign 的时候，异步发送请示示例。
 *
 *      在使用 feign 的时候，也是可以使用Hystrix方法.
 *      但是在 feign 时候，直接使用Hystrix注解会把错。
 *      需要加上一段配置，HystrixConfiguration这个配置类
 *
 * weiximei on 2018/6/11
 */
@Service
public class WxmCommand {

    @Autowired
    FeignService feignService;

    /**
     * 异步方式
     * @return
     */
    @HystrixCommand
    public Future<String> getEmployeesAsync(){

        return new AsyncResult<String>() {

            @Override
            public String invoke() {
                // 把hello请求结果异步返回回去
                return feignService.hello();
            }

        };
    }


    /**
     * 同步方式
     * @return
     */
    @HystrixCommand
    public String getEmployeesAsyncl(){
        return feignService.hello();
    }








}
